쿠키(Cookie)
✒️ 2025-05-30 19:41 내용 수정
참고 자료 : 위키백과 HTTP 쿠키, wikipedia HTTP Cookie, Medium HENDEL Ramzy's How session and cookies works, mdn web docs HTTP Cookies
| 쿠키 | 세션 | 캐시 | |
|---|---|---|---|
| 저장 위치 | 클라이언트 | 웹 서버 | 클라이언트 |
| 종료 시점 | 쿠키 생성 시 만료일 설정 설정이 없다면 웹 브라우저 종료 시 소멸 |
서버에서 지정한 기간 클라이언트와의 상호작용이 없을 때 연결 종료 요청(ex. 로그아웃) 수신 시 |
설정된 캐시 만료일까지 |
| 데이터 크기 | 4KB 제한 | 제한 없음 | 제한 있음 |
| 리소스 | 클라이언트의 리소스 | 서버의 리소스 | 클라이언트의 리소스 |
| 보안 | 클라이언트에 저장되어 사용자 변경이 가능함. 보안에 취약 |
서버에 저장되어 상대적 안정적. 서버 공격 시에는 어쩔 수 없음 |
클라이언트에서 접근 가능 |
| 목적 | 상태 유지, 개인화 | 상태 유지, 사용자 인증, 개인화 | 성능 향상, 대역폭 절약 |
웹 서버에 의해 사용자의 웹 브라우저에 기록되는 정보 파일
- HTTP는 한 번 요청을 보내면 한 번 응답을 하고 연결이 종료되는 stateless 프로토콜이다.
- 쿠키와 세션을 사용하면 클라이언트를 매번 확인하는 절차를 보완할 수 있다.
- 세션(Session) 참고
용도
- 로그인 상태를 유지하거나, 장바구니 기능, 사용자 커스텀 설정 등을 저장할 때 사용한다.
- 해당 파일에 담긴 정보는 인터넷 사용자가 같은 웹 사이트를 방문할 때마다 수시로 새로운 정보로 바뀐다.
- 특정 도메인과 경로에 바인딩되며, 도메인과 경로를 요청하는 요청과 함께 전송된다.
- 세션 ID를 저장하여 클라이언트와 서버 간의 세션 상태를 유지할 때 사용한다.
저장 방법 및 위치
- 개별 쿠키의 저장 용량은 4KB이며, 텍스트 파일로 저장된다.
- 쿠키는 클라이언트의 정보를 웹 브라우저(클라이언트)에 저장하며, 이후 웹 서버로 전송되는 요청(request)에는 쿠키가 가진 정보도 포함된다.
라이프 사이클
- 웹 서버에서 쿠키 생성 시 만료 기한을 지정하며, 지정한 만료 기한이 지나면 쿠키는 만료되고 사용자의 브라우저에서 제거된다.
- 만료 시간과 날짜는 서버의 시간이 아닌 쿠키가 저장되는 클라이언트의 시간을 기준으로 한다.
주의사항
- 쿠키는 프로그램이 아니기 때문에 바이러스를 옮기거나 악성 코드를 설치할 수 없으나, 클라이언트의 브라우징 행동을 추적하거나 웹 계정 접근 권한을 획득할 수 있어 보안 문제가 있다.
- 쿠키에 개인 정보나 민감한 정보를 저장하지 않도록 주의해야 한다.
- 쿠키는 텍스트로 저장되기에 SSL/TLS와 같은 보안 프로토콜을 사용하여 암호화한 후 전송해야 한다.
Set-CookieHeader의Secure: HTTPS 상에서 암호화된 요청일 경우에만 전송한다.Set-CookieHeader의HttpOnly: XSS 공격을 방지하기 위해 JavaScript의Document.cookieAPI에 접근할 수 없도록 설정한다.
구성요소
-
쿠키는 key/value 쌍으로 브라우저에 저장되는 문자열 데이터다.
- 이름(name), key : 쿠키를 구별하기 위한 이름
- 값(value) : 쿠키의 이름과 관련된 값
-
유효 시간 : 쿠키 유지 시간
-
도메인 : 쿠키를 전송할 도메인
-
경로 : 쿠키를 전송할 경로
-
플래그 :
Secure,HttpOnly등의 옵션과 관련된 Attribute
동작 과정
- 쿠키 생성 : HTTP 요청을 수신할 때 웹 서버에선 쿠키를 생성하여 응답 데이터와 함께 쿠키를 HTTP Header의
Set-Cookie로 포함시켜 전송한다.
Set-Cookie : myCookie=value
- 쿠키 저장 : 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다.
- 쿠키 전송 : 웹 브라우저는 한 번 저장된 쿠키의 요청이 있을 때마다 HTTP Header의
Cookie로 쿠키를 포함시켜 웹 서버에 전송한다.- 웹 서버는 쿠키를 사용하여 필요한 작업을 수행할 수 있다.
Cookie : myCookie=value;